#pragma once
#include "Enemy.h"
#include "Boss.h"

//#include "../SGD Wrappers/SGD_Handle.h"

class Vampire :
	public Boss
{
public:
	Vampire();
	virtual ~Vampire() = default;

	/**********************************************************/
	// Interface:
	//	- virtual functions for children classes to override
	enum AttackStrategy { BAT_ATTACK, VAMPIRE_ATTACK, VAMPIRE_TRANSFORMING, VAMPIRE_BITE };
	AttackStrategy currAttackStrat = VAMPIRE_ATTACK;

	virtual void	Update(float elapsedTime)		override;
	virtual void	Render(void)					override;

	//	virtual SGD::Rectangle GetRect(void)	const			override;
	virtual int		GetType(void)	const			override	{ return OBJ_ENEMY; }
	virtual void	HandleCollision(GameObject* pOther)	override;
	virtual void	HandleEvent(const SGD::Event* pEvent) override;
	virtual int		GetEnemyType()	const { return ENEMY_BOSS; }

	virtual bool DoAttack();
	virtual void Attack();
	virtual void Retreat();
	virtual void MoveLeft(float speed = 100.0f);
	virtual void MoveRight(float speed = 100.0f);

	virtual void EnterIdle();
	virtual void EnterPatrol();
	virtual void EnterCloseIn();
	virtual void EnterDead();

	void VampireAttack();
	void MoveTowardsPlayer();
	void BatDead(SGD::Point);

	SGD::Vector aiming = { 0, 0 };

private:
	float distanceToPlayer;
	float shotCooldown = 0.0f;
	bool transforms[3];
	bool bloodRage = false;
	bool retreating = false;
	GameplayState *gameplay = GameplayState::GetInstance();
	SGD::Point playerPos;
	int tempHealth;

};

